/// 1. 通道类似于单所有权，值传递到通道后，发送着就无法再使用这个值
/// 2. 共享内存类似于多所有权，即多个线程可以同时访问相同的内存位置
/// # 互斥器：mutex "Mutex<T>"
/// 1. 任意时刻，只允许一个线程来访问某些数据
/// 2. 互斥器使用时，需要先获取到锁，使用后需要释放锁

use std::sync::Mutex;

fn main() {
    // Mutex<T> 是一个只能指针，lock调用返回一个叫做MutexGuard的智能指针
    // 内容提供了drop的方法，实现当MutexGuard离开作用域时自动释放
    let m = Mutex::new(5);
    {
        let mut num = m.lock().unwrap();
        *num = 6;
    } // 离开作用域时自动释放
    println!("m = {:?}", m);
    println!("Hello, world!");
}
